/**
 * 格式化工具函数
 */

/**
 * 格式化文件大小
 * @param {number|string} bytes 文件大小(字节)
 * @returns {string} 格式化后的文件大小
 */
export const formatFileSize = (bytes) => {
  if (bytes === 0 || isNaN(bytes)) return '0 B'

  const k = 1024
  const sizes = ['B', 'KB', 'MB', 'GB', 'TB']
  const i = Math.floor(Math.log(bytes) / Math.log(k))

  return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i]
}

/**
 * 格式化日期
 * @param {string|Date|number} date 日期字符串、Date对象或时间戳
 * @param {string} format 格式类型，可选：'datetime' | 'date' | 'time'
 * @returns {string} 格式化后的日期
 */
export const formatDate = (date, format = 'datetime') => {
  if (!date) return ''

  const d = new Date(date)
  if (isNaN(d.getTime())) return String(date)

  const year = d.getFullYear()
  const month = String(d.getMonth() + 1).padStart(2, '0')
  const day = String(d.getDate()).padStart(2, '0')
  const hours = String(d.getHours()).padStart(2, '0')
  const minutes = String(d.getMinutes()).padStart(2, '0')
  const seconds = String(d.getSeconds()).padStart(2, '0')

  switch (format) {
    case 'date':
      return `${year}-${month}-${day}`
    case 'time':
      return `${hours}:${minutes}:${seconds}`
    case 'datetime':
    default:
      return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`
  }
}

/**
 * 获取状态文本
 * @param {string} status 状态值
 * @returns {string} 格式化后的状态文本
 */
export const getStatusText = (status) => {
  const statusMap = {
    'pending': '待审核',
    'approved': '已通过',
    'rejected': '已驳回',
    'draft': '草稿',
    'processing': '处理中'
  }
  return statusMap[status] || status
}

/**
 * 获取状态标签类型
 * @param {string} status 状态值
 * @returns {string} Element Plus标签类型
 */
export const getStatusTagType = (status) => {
  const typeMap = {
    'pending': 'warning',
    'approved': 'success',
    'rejected': 'danger',
    'draft': 'info',
    'processing': 'primary'
  }
  return typeMap[status] || 'info'
}

/**
 * 获取文件类型图标
 * @param {string} fileType 文件类型
 * @returns {string} 对应的图标类名
 */
export const getFileTypeIcon = (fileType) => {
  const iconMap = {
    'doc': 'el-icon-document',
    'docx': 'el-icon-document',
    'pdf': 'el-icon-document',
    'xls': 'el-icon-document-excel',
    'xlsx': 'el-icon-document-excel',
    'ppt': 'el-icon-document-ppt',
    'pptx': 'el-icon-document-ppt',
    'txt': 'el-icon-document-text',
    'zip': 'el-icon-document-zip',
    'image': 'el-icon-picture',
    'video': 'el-icon-video-play'
  }

  return iconMap[fileType.toLowerCase()] || 'el-icon-document'
}

/**
 * 获取文件类型标签类型
 * @param {string} fileType 文件类型
 * @returns {string} Element Plus标签类型
 */
export const getFileTypeTagType = (fileType) => {
  const typeMap = {
    'pdf': 'danger',
    'doc': 'primary',
    'docx': 'primary',
    'xls': 'success',
    'xlsx': 'success',
    'ppt': 'warning',
    'pptx': 'warning'
  }
  return typeMap[fileType.toLowerCase()] || 'info'
}

export default {
  formatFileSize,
  formatDate,
  getStatusText,
  getStatusTagType,
  getFileTypeIcon,
  getFileTypeTagType
}
